/*
 * Compressor.h
 *
 *  Created on: Nov 30, 2012
 *      Author: m
 */

#ifndef COMPRESSOR_H_
#define COMPRESSOR_H_

#include <exception>
#include "../common_components/physical_layer_commons.h"

namespace physical
{

/**
 * Interfáz de Compresores
 */
class Compressor
{
public:

    /**
     * Destructor
     */
    virtual ~Compressor()
    {
    }
    ;

    /**
     * Comprime un array de bytes
     *
     * @param data Array de bytes a comprimir
     * @param compressedData Buffer de bytes donde se guarda la información comprimida
     * @param dataSize Tamaño del array de bytes a comprimir
     * @return Tamaño del array de bytes con la información comprimida
     */
    virtual size_t compress( const byte* data, byte* compressedData,
            size_t dataSize ) = 0;

    /**
     * Descomprime un array de bytes
     *
     * @param compressedData Array bytes con la información comprimida
     * @param data Array de bytes donde se guarda la información descomprimida
     * @param compressedDataSize Tamaño del array de bytes a descomprimir
     * @return Tamaño del array de bytes con la información descomprimida
     */
    virtual size_t uncompress( const byte* compressedData, byte* data,
            size_t compressedDataSize ) = 0;
};

/*************************************************************
 **********************   Exepciones   **********************
 *************************************************************/
/**
 * Excepción genérica de Compressor
 */
class CompressorException : public std::exception
{

};

} /* namespace physical */
#endif /* COMPRESSOR_H_ */
